package isdproject.client;

import java.util.ArrayList;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;

/**
 * 
 * @author User
 * @version 1.1
 * Klas toevoegen ui: kent 1 textbox, met een label ervoor, 
 * om een klascode op te kunnen geven.
 * Dit kan opgeslagen worden door op de button 'klas toevoegen' te clicken.
 * Er is ook een cancel button.
 */
///had eigenlijk moeten zijn: klasUI
public class KlasToevoegen_UI
{
	//losse variabelen
	///eigenlijk moet het label en de text ervan 'klas' zijn, maar dat zou inconsistent worden met oa het TO
	///eigenlijk zou er een errorlabel in deze ui moeten zitten
	/**
	 * Dit verklarende label heeft een classname zodat hij met css aangepast kan worden.
	 */
	private Label l_groepscode;
	private TextBox tb_groepscode;
	private Button b_klastoevoegen, b_cancel;
	///!!delegate voor opslag
	private final OpslagServiceDelegate osd;
	
	/**
	 * De constructor voor de UI voor de use case 'klas toevoegen'.
	 */
	public KlasToevoegen_UI(final OpslagServiceDelegate osd)
	{	
		this.osd = osd;
		///asynchroon, en dus eigenlijk niet zeker of dit al wel klaar is:
		osd.listKlassen();
		//losse variabelen instantieren:
		
		l_groepscode = new Label("Groepcode");
		//zie css voor begeleidendlabel opmaak
		l_groepscode.setStylePrimaryName("begeleidendlabel");
		
		tb_groepscode = new TextBox();
		tb_groepscode.setVisibleLength(25);
		
		b_klastoevoegen = new Button("Klas toevoegen", new ClickHandler()
		{
			public void onClick(ClickEvent event)
			{
				///asynchroon, en dus eigenlijk niet zeker of dit al wel klaar is:
				osd.listKlassen();
				///op het moment is nog niet (goed) gespecificeerd wat de invoerrestricties moeten zijn
				///er wordt nu alleen gecontroleerd of er alleen geen leestekens mogen worden ingevoerd --> eigenlijk klopt zelfs dit niet: er wordt nu gecontroleerd of er exact 1 kleine letter of cijfer wordt ingevoerd
				///er wordt nu helaas niet met een errorlabel maar met een pop-up window gewerkt
				if(!tb_groepscode.getText().matches("[a-z0-9]"))
				{
					Window.alert("Groepcode niet goed ingevoerd.");
				}
				///eigenlijk moet nog geschekt worden of waarden al bestaan
				else
				{
					//Klas wordt door het UI toegevoegd aan de database
					///maar eerst een voorbeeld van checken op of de klas al bestaat:
					Klas klas = new Klas(tb_groepscode.getText());
					boolean exists = false;
					ArrayList<Klas> klassen = osd.getKlassen();
					for (int i = 0; i < klassen.size(); i++)
					{
						if(klassen.get(i).getGroepscode().equals(tb_groepscode.getText()))
						{
							exists = true;
						}
					}
					if(!exists)
					{
						osd.addKlas(klas);
					}
					else
					{
						Window.alert("deze klas bestaat al!");
					}
					
				}
			}
		}); 
		b_klastoevoegen.setWidth("150");
		
		b_cancel = new Button("Cancel", new ClickHandler()
		{
			public void onClick(ClickEvent event)
			{
				///nog niet gespecificeerd wat cancel moet doen!
				Window.alert("Cancel");
			}
		}); 
		b_cancel.setWidth("80");
		
		//widgets toevoegen en layout regelen. 
		//let op! layout zit hem ook in width van labels en buttons
		//of dat nou specifiek gezet is, of komt door de text erop, of door zaken als 'visiblelength'
		Grid g_ = new Grid(4,3);
		g_.setSize("600", "200");
		
		g_.setWidget(0, 0, l_groepscode);
		///hier zou ik errorlabel instoppen:
		///g_.setWidget(1, 0, errorlabel);
		g_.setWidget(0, 2, tb_groepscode);
		g_.setWidget(3, 1, b_klastoevoegen);
		g_.setWidget(3, 2, b_cancel);
		
		RootPanel.get("main").add(g_);
	}
}
